#ifndef DOCKER_H
#define DOCKER_H
#include <iostream>
#include <cstring>
#include <map>
#include <util.h>
using namespace std;
/**
 * 登录阿里云的 Docker 服务
 *
 * @param username 用户名
 * @param password 密码
 * @param cmd 保存命令
 * @return 登录结果，0 表示成功，-1 表示失败
 */
int login_aliyuncs_docker(const char *username,const char *password,string& cmd);
/**
 * 配置数据源镜像
 *
 * @param cmd 保存命令
 * @return 配置结果，0 表示成功，-1 表示失败
 */
int sources_list(string& cmd);
/**
 * 构建镜像
 *
 * @param buildDir 构建目录
 * @param dockerfile Dockerfile 内容
 * @param local_repository 本地仓库
 * @param local_tag 本地标签
 * @param save_repository 保存仓库
 * @param save_tag 保存标签
 * @return 构建结果，0 表示成功，-1 表示失败
 */
int build_image(string buildDir,string dockerfile,string local_repository,string local_tag,string save_repository,string save_tag);
/**
 * @brief 删除镜像
 * @param repository 镜像名称
 * @param tag 镜像标签
 * @param cmd 保存命令
 * @return int
 */
int delete_image(string repository,string tag,string& cmd);



/**
 * @brief 保存代理镜像
 *
 * @param prefix 前缀
 * @return int
 */
int saveProxyImage(string buildDir,const char *prefix);

/**
 * @brief 保存ssh镜像
 * @param buildDir 构建目录
 * @param prefix 前缀
 * @return 成功返回 0，失败返回 -1
 */
int saveSshUbuntu_22_04Image(string buildDir,const char *prefix);

/**
 * @brief 保存 ssh nginx proxy 镜像
 * @param buildDir 构建目录
 * @param prefix 前缀
 * @return 成功返回 0，失败返回 -1
 */
int saveSshNginxProxyImage(string buildDir,const char *prefix);

/**
* docker 容器服务
*/
class VesselServices{
   public:
      string name;//服务名称
      string image;//镜像名称
      string ip;//服务ip
      string command;//服务命令
      vector<string> ports;//服务端口
      vector<string> envs;//服务环境变量
      vector<string> volumes;//服务卷
      VesselServices(){};
};

class DockerContainer{
private:
    string ymlFile;//容器配置文件
    string ymlPath;//容器配置文件路径
    string yml_networks;// 网络配置
    string yml_subnet;// 子网配置
    string rootVolume;// 根挂载卷
    map<string,VesselServices> mVessel;//容器服务
   int networks();// 网络配置
   /**
    * @brief 添加服务
    * @param services 服务
    * @return 成功返回 0，失败返回 -1
    */
   int addServices(VesselServices services);
   string getIp(string ip);// 获取容器ip
   int services();// 服务配置
   int httpsServices();// https服务配置
   int mysqlServices(string name);// mysql服务配置
   int redisServices(string name);// redis服务配置
   int nexus3Services(string name);// nexus3服务配置
   int alistServices(string name);// alist服务配置
   int aria2Services(string name);// aria2服务配置
   int videoServices(string name);// video服务配置
   int nginxProxyServices(string name);// nginx代理服务配置

public:
    DockerContainer();
    ~DockerContainer();
    int run();//运行容器
    int stop();//停止容器
    int restart();//重启容器
    int remove();//删除容器
    int status();//容器状态
    int logs();//容器日志
    int exec();//容器执行命令
    int top();//容器进程
};







#endif